package cn.tedu.demo.service.impl;

import cn.tedu.demo.ex.ServiceException;
import cn.tedu.demo.mapper.AdminMapper;
import cn.tedu.demo.pojo.dto.EmpLoginDTO;
import cn.tedu.demo.pojo.vo.EmpVO;
import cn.tedu.demo.service.IAdminService;
import cn.tedu.demo.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;


@Service
@Slf4j
public class AdminServiceImpl implements IAdminService {

    @Autowired
    private AdminMapper adminMapper;

    @Override
    public void login (EmpLoginDTO empLoginDTO, HttpSession session) {

        log.debug("开始处理【根据工号查询管理员】的业务，参数：{}",empLoginDTO.getEmpNum());
        //通过工号，查询表中的管理员
        EmpVO queryResult = adminMapper.getStandardByEmpnum(empLoginDTO.getEmpNum());
        log.debug("根据工号：{}查询到的管理员结果是：{}",empLoginDTO.getEmpNum(),queryResult);
        //判断查找到的对象是否为空
        if(queryResult==null){//如果为空，则抛出NOT_FOUND异常
            String message="登录失败，账号不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERROR_NOT_FOUND,message);
        }
        //如果不为空，则先判断此账号是否属于超级管理员的部门
        String dep = "系统管理部";
        if(!queryResult.getDeptName().equals(dep)){
            String message="登录失败，用户不具备登录权限！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERROR_FORBIDDEN,message);
        }
        // 通过返回的对象获取此对象的密码
        String queryPassword = queryResult.getPassword();
        //用这个密码与用户输入的密码进行比较
        if(!queryPassword.equals(empLoginDTO.getPassword())){//如果不一致，则抛出异常
            String message="登录失败，用户名或密码错误！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERROR_NOT_FOUND,message);
        }
        session.setAttribute("admin",queryResult);//经过验证无误后，把对象存入session中
        log.debug("登录成功，存入session：{}",session.toString());
        log.debug("登录成功！用户是：{}",empLoginDTO.getEmpNum());

    }
}
